package com.dd.cloud.user.service.plat;

import cn.binarywang.wx.miniapp.api.WxMaService;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.cloud.user.entity.plat.PlatformLogin;
import com.dd.cloud.user.entity.plat.PlatformWechatInfo;
import com.dd.cloud.user.req.patient.BindPatientUserWxReq;
import com.dd.cloud.user.req.plat.PlatBindAccountReq;
import com.dd.cloud.user.req.plat.PlatLoginAccountReq;
import com.dd.cloud.user.res.plat.PlatLoginRes;
import com.dd.cloud.user.res.plat.WxGetTokenRes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * <p>
 * 第三方登录信息表 服务类
 * </p>
 *
 * @author czg
 * @since 2022-05-06
 */
public interface IPlatformLoginService extends IService<PlatformLogin> {
    /**
     * 第三方账号登录
     *
     * @param req 公众号openId
     * @return 医生账号信息
     */
    PlatLoginRes<Object> platLogin(HttpServletRequest request, HttpServletResponse response,
                                   PlatLoginAccountReq req);

    /**
     * 第三方登录绑定账号
     *
     * @param req
     */
    Integer bindAccountPlat(HttpServletResponse response, PlatBindAccountReq req);

    /**
     * PC应用微信登录第一步, 获取微信二维码链接
     *
     * @return
     */
    String wxLoginurl(String url);

    /**
     * PC应用微信登录第二步, 通过code获取access_token 并登录
     *
     * @return
     */
    PlatLoginRes getAcTokenByCode(HttpServletRequest request, HttpServletResponse response, PlatLoginAccountReq req);

    /**
     * PC微信登录刷新token
     *
     * @param code
     * @return
     */
    WxGetTokenRes refreshToken(String code);

    /**
     * 统一获取access_token
     *
     * @return String
     */
    String getAccessToken();

    /**
     * 获取wxService
     *
     * @param userType
     * @return WxMaService
     */
    WxMaService getWxMaService(Integer userType);

    /**
     * 获取微信openId
     *
     * @param response
     * @param code
     * @param appId
     * @return
     */
    PlatformWechatInfo getWechatOpenid(HttpServletResponse response, String code, String appId);

    /**
     * 解绑微信账号
     */
    void unbindAccountWx();

    /**
     * 获取小程序openid
     */
    String getAppletConfig(String code);

    /**
     * 获取医生端accesstoken
     *
     * @return String
     */
    String getDoctorAccessToken();

    /**
     * 获取用户端token
     *
     * @return String
     */
    String getPatientUserAccessToken();

    /**
     * 获取用户端token
     *
     * @return String
     */
    String getPatientUserGzhAccessToken();

    /**
     * 绑定微信小程序用户
     *
     * @param code
     * @param userId
     * @param userType
     * @return
     */
    Integer bindAppletUser(String code, Integer userId, Integer userType);

    /**
     * 小程序未授权, 通过code获取手机号和用户信息,添加用户并授权
     *
     * @param req
     * @return
     */
    PlatLoginRes<?> getWechatUserInfoAppletPhone(BindPatientUserWxReq req, HttpServletRequest request, HttpServletResponse response);

    /**
     * 获取用户端openId
     *
     * @param code
     * @return
     */
    String getUserAppletConfig(String code);

    /**
     * 获取二维码
     *
     * @param page
     * @param param
     * @return
     */
    String getWxQr(String page, String param);

    /**
     * 获取患者公众号二维码
     *
     * @return
     */
    String getPatientGZHWxQr(Integer docId, String param);
}
